﻿using System;
using System.IO;
using System.Data;
using System.Windows;
using System.Collections;
using System.Windows.Input;
using System.ComponentModel;
using System.Windows.Controls;
using Sinacor.Infra.UI.Common;
using Sinacor.Infra.UI.Controls;
using Sinacor.Infra.UI.Controls.SmartClient;
using System.Collections.Generic;
using Sinacor.Infra.UI.Controls.SmartClient.Validation;
using Sinacor.UI.Bovespa.Movimento.Presenter;
using Sinacor.UI.Bovespa.Clientes.View.SmartClient;
using Sinacor.UI.Bovespa.Ordens.View.SmartClient;

namespace Sinacor.UI.Bovespa.Movimento.View.SmartClient
{
    /// <summary>
    /// 
    /// </summary>
    public partial class ConsultaHistoricoOrdensNegocios : SinacorWindow, IHistoricoOrdemNegocio
    {
        # region Campos
        Sinacor.UI.Bovespa.Movimento.Presenter.HistoricoOrdemNegocio _presenter;

        public Sinacor.UI.Bovespa.Movimento.Presenter.HistoricoOrdemNegocio Presenter
        {
            get { return _presenter; }
            set { _presenter = value; }
        }
        #endregion

        public ConsultaHistoricoOrdensNegocios()
        {
            this.InitializeComponent();
            dtgOrdens.NewItemType = typeof(Model.HistoricoOrdem);
            dtgNegocios.NewItemType = typeof(Model.HistoricoNegocio);
            this.AfterInitialize += new RoutedEventHandler(ConsultaHistoricoOrdensNegocios_AfterInitialize);
        }

        void ConsultaHistoricoOrdensNegocios_AfterInitialize(object sender, RoutedEventArgs e)
        {
            this.ShowUserWaitingProcess();
            _presenter = new Sinacor.UI.Bovespa.Movimento.Presenter.HistoricoOrdemNegocio(this);
            _presenter.HistoricoNegocio = new Sinacor.UI.Bovespa.Movimento.Model.HistoricoNegocio();
            _presenter.FiltroHistoricoNegocio = new Sinacor.UI.Bovespa.Movimento.Model.Parameter.FiltroHistoricoNegocio();
            _presenter.FiltroHistoricoOrdem = new Sinacor.UI.Bovespa.Movimento.Model.Parameter.FiltroHistoricoOrdem();
            _presenter.HistoricoNegocio = new Sinacor.UI.Bovespa.Movimento.Model.HistoricoNegocio();
            _presenter.HistoricoOrdem = new Sinacor.UI.Bovespa.Movimento.Model.HistoricoOrdem();
            _presenter.ListaHistoricoNegocios = new ModelCollection<Sinacor.UI.Bovespa.Movimento.Model.HistoricoNegocio>();
            _presenter.ListaHistoricoOrdens = new ModelCollection<Sinacor.UI.Bovespa.Movimento.Model.HistoricoOrdem>();
            this.DataContext = _presenter;

            cmbSitOtdem.ItemsSource = EnumWrapper<Model.Enum.SituacaoOrdem>.GetEnums();
            cmbSitOtdem.DisplayMemberPath = "Value";
            cmbSitOtdem.SelectedValuePath = "Value";

            this.HideUserWaitingProcess();
        }

        private void btnPesquisar_Click(object sender, RoutedEventArgs e)
        {
            ClearServiceErrors();
            this.ShowUserWaitingProcess();
            if (cmbSitOtdem.SelectedIndex != -1)
                _presenter.FiltroHistoricoOrdem.SituacaoOrdem = cmbSitOtdem.SelectedValue.ToString();
            else
                _presenter.FiltroHistoricoOrdem.SituacaoOrdem = " ";
            _presenter.FiltroHistoricoOrdem.NaturezaOperacao = (chkNatOprCompra.IsChecked.Value && chkNatOprVenda.IsChecked.Value) ? Model.Enum.NaturezaOperacao.CompraVenda : (chkNatOprCompra.IsChecked.Value) ? Model.Enum.NaturezaOperacao.Compra : (chkNatOprVenda.IsChecked.Value) ? Model.Enum.NaturezaOperacao.Venda : (Model.Enum.NaturezaOperacao?)null;
            _presenter.ConsultarHistoricoOrdens();
            this.HideUserWaitingProcess();
        }

        private void btnNovaPesquisa_Click(object sender, RoutedEventArgs e)
        {
            ClearServiceErrors();
            _presenter.FiltroHistoricoOrdem = new Sinacor.UI.Bovespa.Movimento.Model.Parameter.FiltroHistoricoOrdem();            
            _presenter.ListaHistoricoOrdens = new ModelCollection<Sinacor.UI.Bovespa.Movimento.Model.HistoricoOrdem>();
            dtpDataPregao.UpdateTarget(SinacorDatePicker.ValueProperty);
            txtClienteOrdem.Text = string.Empty;
            txtAtivoOrdem.Text = string.Empty;
            chkNatOprCompra.IsChecked = false;
            chkNatOprVenda.IsChecked = false;
            cmbSitOtdem.SelectedIndex = -1;
            txtClienteOrdem.UpdateTarget(SinacorTextBox.TextProperty);
            txtAtivoOrdem.UpdateTarget(SinacorTextBox.TextProperty);
            AtualizarGridHistoricoOrdens();
        }

        #region IHistoricoOrdemNegocio Members

        public void AtualizarGridHistoricoNegocios()
        {
            dtgNegocios.UpdateTarget(SinacorDataGrid.ItemsSourceProperty);
        }

        public void AtualizarGridHistoricoOrdens()
        {
            dtgOrdens.UpdateTarget(SinacorDataGrid.ItemsSourceProperty);
        }

        public void InformarNenhumRegistroEncontrado()
        {
            SinacorMessageBox.Show(FindResource("Bovespa.Movimento.Message.PesquisaSemRetorno").ToString(), SinacorMessageBoxImage.Information);
        }

        #endregion

        private void btnPesquisaClienteOrdem_OnBufferedClick(object sender, RoutedEventArgs e, int clickCount)
        {
            PesquisaClientes pesquisaClientes = new PesquisaClientes();

            Clientes.Model.PesquisaCliente filtroPesq = new Sinacor.UI.Bovespa.Clientes.Model.PesquisaCliente() { Codigo = txtClienteOrdem.Value };

            pesquisaClientes.CarregaParametros(Sinacor.UI.Bovespa.Clientes.Model.Enum.JanelaChamada.CasamentoManual, filtroPesq);

            pesquisaClientes.Owner = this;
            pesquisaClientes.SetMenuHeader("Bovespa.Movimento.Label.ConsHistoricoOrdensNegocios");
            pesquisaClientes.ShowDialog();

            if (pesquisaClientes.PesquisaClienteModel.Codigo > 0)
            {
                _presenter.FiltroHistoricoOrdem.CodigoCliente = pesquisaClientes.PesquisaClienteModel.Codigo;
                txtClienteOrdem.UpdateTarget(SinacorInt32TextBox.ValueProperty);
            }
        }

        private void btnPesquisaAtivoOrdem_OnBufferedClick(object sender, RoutedEventArgs e, int clickCount)
        {
            Ordens.Model.Titulo modelTitulo = new Ordens.Model.Titulo();
            modelTitulo.Codigo = txtAtivoOrdem.Text;
            modelTitulo.Mercado = null;
            modelTitulo.DataPregao = dtpDataPregao.Value;//((Model.Calendario)cmbDataMovimento.SelectedItem).DataPregao;

            PesquisaTitulo pesquisaTitulo = new PesquisaTitulo();
            pesquisaTitulo.CarregarParametros(modelTitulo, null);
            pesquisaTitulo.Owner = this;
            pesquisaTitulo.SetMenuHeader("Bovespa.Movimento.Label.ConsHistoricoOrdensNegocios");
            pesquisaTitulo.ShowDialog();

            if (pesquisaTitulo.TituloEscolhido != null)
            {
                _presenter.FiltroHistoricoOrdem.Ativo = pesquisaTitulo.TituloEscolhido.Codigo;
                txtAtivoOrdem.UpdateTarget(SinacorTextBox.TextProperty);
            }
        }

        private void btnPesquisarNegocio_Click(object sender, RoutedEventArgs e)
        {
            ClearServiceErrors();
            this.ShowUserWaitingProcess();
            _presenter.FiltroHistoricoNegocio.NaturezaOperacao = (chkNatOprNegocioCompra.IsChecked.Value && chkNatOprNegocioVenda.IsChecked.Value) ? Model.Enum.NaturezaOperacao.CompraVenda : (chkNatOprNegocioCompra.IsChecked.Value) ? Model.Enum.NaturezaOperacao.Compra : (chkNatOprNegocioVenda.IsChecked.Value) ? Model.Enum.NaturezaOperacao.Venda : (Model.Enum.NaturezaOperacao?)null;
            _presenter.ConsultarHistoricoNegocios();
            this.HideUserWaitingProcess();
        }

        private void btnNovaPesquisaNegocio_Click(object sender, RoutedEventArgs e)
        {
            ClearServiceErrors();
            _presenter.FiltroHistoricoNegocio = new Sinacor.UI.Bovespa.Movimento.Model.Parameter.FiltroHistoricoNegocio();
            _presenter.ListaHistoricoNegocios = new ModelCollection<Sinacor.UI.Bovespa.Movimento.Model.HistoricoNegocio>();
            AtualizarGridHistoricoNegocios();
            dtpDataPregaoNegocio.UpdateTarget(SinacorDatePicker.ValueProperty);
            txtAtivoNegocio.UpdateTarget(SinacorTextBox.TextProperty);
            chkNatOprNegocioVenda.IsChecked = false;
            chkNatOprNegocioCompra.IsChecked = false;
            txtNegocio.UpdateTarget(SinacorInt32TextBox.ValueProperty);
        }

        private void btnPesquisaAtivoNegocio_OnBufferedClick(object sender, RoutedEventArgs e, int clickCount)
        {
            Ordens.Model.Titulo modelTitulo = new Ordens.Model.Titulo();
            modelTitulo.Codigo = txtAtivoNegocio.Text;
            modelTitulo.Mercado = null;
            modelTitulo.DataPregao = dtpDataPregaoNegocio.Value;//((Model.Calendario)cmbDataMovimento.SelectedItem).DataPregao;

            PesquisaTitulo pesquisaTitulo = new PesquisaTitulo();
            pesquisaTitulo.CarregarParametros(modelTitulo, null);
            pesquisaTitulo.Owner = this;
            pesquisaTitulo.SetMenuHeader("Bovespa.Movimento.Label.ConsHistoricoOrdensNegocios");
            pesquisaTitulo.ShowDialog();

            if (pesquisaTitulo.TituloEscolhido != null)
            {
                _presenter.FiltroHistoricoNegocio.Ativo = pesquisaTitulo.TituloEscolhido.Codigo;
                txtAtivoNegocio.UpdateTarget(SinacorTextBox.TextProperty);
            }
        }

        private void ContextMenu_ConsultarNegociosCasadosOrdem_Click(object sender, RoutedEventArgs e)
        {            
            _presenter.HistoricoOrdem = dtgOrdens.SelectedItem as Model.HistoricoOrdem;
            _presenter.ConsultarNegociosDaOrdem();
        }

        private void dtgOrdens_SelectionChanged(object sender, SelectionChangedEventArgs e)
        {
            _presenter.HistoricoOrdem = dtgOrdens.SelectedItem as Model.HistoricoOrdem;                
            _presenter.ConsultarNegociosDaOrdem();            
        }

        private void ContextMenu_ConsultarOrdensCasadasNegocio_Click(object sender, RoutedEventArgs e)
        {
            _presenter.HistoricoNegocio = dtgNegocios.SelectedItem as Model.HistoricoNegocio;
            _presenter.ConsultarOrdensDoNegocio();
        }

        private void dtgOrdens_MouseDoubleClick(object sender, MouseButtonEventArgs e)
        {
            _presenter.HistoricoOrdem = dtgOrdens.SelectedItem as Model.HistoricoOrdem;
            _presenter.ConsultarNegociosDaOrdem();   
        }

        private void ContextMenu_ConsultarNegociosCasadosOrdem_Loaded(object sender, RoutedEventArgs e)
        {
            if (dtgOrdens.SelectedItems.Count > 1)
                ((SinacorContextMenuItem)sender).IsEnabled = false;
        }

        private void dtgNegocios_MouseDoubleClick(object sender, MouseButtonEventArgs e)
        {
            _presenter.HistoricoNegocio = dtgNegocios.SelectedItem as Model.HistoricoNegocio;
            _presenter.ConsultarOrdensDoNegocio();
        }
    }
}
